package com.truedian.wg.components.organism.dialog.internal

import com.truedian.wg.components.organism.dialogUtil.internal.PageId


/**
 * 弹窗助手管理器
 * 
 * 全局单例对象，负责管理所有页面的弹窗助手实例。提供弹窗助手的注册、注销、
 * 查找等功能，确保每个页面都有对应的弹窗管理能力。
 * 
 * ## 主要功能
 * - 管理页面ID与弹窗助手的映射关系
 * - 提供弹窗助手的生命周期管理
 * - 支持页面销毁时的资源清理
 * - 防止内存泄漏和重复创建
 * 
 * ## 技术实现
 * - 使用HashMap存储页面ID到弹窗助手的映射
 * - 提供线程安全的操作方法
 * - 集成日志记录用于调试
 * 
 * ## 使用场景
 * 在页面创建时注册弹窗助手，在页面销毁时注销弹窗助手。
 * 
 * @see DialogHelper 弹窗助手类
 * @see PageId 页面标识类型别名
 * 
 * @since 1.0.0
 * @author CSP
 */
internal object DialogHelperManager {

    private val dialogHelperMap = HashMap<PageId, DialogHelper>()

    /**
     * 添加弹窗助手
     * 
     * 为指定页面注册弹窗助手实例。
     * 
     * @param pageId 页面唯一标识
     * @param dialogHelper 弹窗助手实例
     */
    fun addDialogHelper(pageId: PageId, dialogHelper: DialogHelper) {
        dialogHelperMap[pageId] = dialogHelper
    }

    /**
     * 移除弹窗助手
     * 
     * 注销指定页面的弹窗助手，释放相关资源。
     * 
     * @param pageId 页面唯一标识
     */
    fun removeDialogHelper(pageId: PageId) {
        dialogHelperMap.remove(pageId)
    }

    /**
     * 检查页面是否包含弹窗助手
     * 
     * @param pageId 页面唯一标识
     * @return 如果页面已注册弹窗助手则返回true
     */
    fun containsPagerId(pageId: PageId) = dialogHelperMap.containsKey(pageId)

    /**
     * 获取弹窗助手
     * 
     * 根据页面ID获取对应的弹窗助手实例。
     * 
     * @param pageId 页面唯一标识
     * @return 弹窗助手实例，如果不存在则返回null
     */
    fun getDialogHelper(pageId: PageId) = dialogHelperMap[pageId]
}